perm filename TLKEF6.FAI[1,VDS] blob
sn#215595 filedate 1977-04-22 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00004 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE TLKEF6
C00004 00003 START OF EXECUTABLE CODE
C00008 00004 [LOCAL STORAGE AREA]
C00011 ENDMK
C⊗;
TITLE TLKEF6
INTERNAL TLKEF6
;"TLKEF6" IS A SAIL CALLABLE PROCEDURE FOR READING THE FORCE SENSING WRIST
;STRAIN GAGES FROM A PROGRAM THAT RUNS ON THE PDP11/45. A SAMPLE
;SAIL CALL IS AS FOLLOWS:
;
; ERROR←TLKEF6(INTEGER ARRAY READINGS);
;WHERE
; ERROR = 0 IF "TLKEF6" WAS SUCCESSFUL, ≠0 OTHERWISE
; READINGS = 10x8 ARRAY IN WHICH THE STRAIN GAGES READINGS ARE RETURNED
;
;THIS ROUTINE TYPES IT'S OWN ERROR MESSAGES ON THE TTY.
;DEFINITIONS
P←17 ;PUSH STACK REGISTER
MASLOC←40000 ;MASTER NUMBER IN ELF
DATADD←40001 ;START ADDRESS TO READ DATA FROM ELF
MASTER←10567 ;CHECK NUMBER FROM ELF IF DONE READING
DBUFL ←=80 ;NUMBER OF WORDS TO TRANSFER FROM THE ELF
;START OF EXECUTABLE CODE
TLKEF6: SETZ 1, ;CLEAR ERROR FLAG
MOVEM 16,HOLD+16 ;SAVE THE REGISTERS
HRRZI 16,HOLD
BLT 16,HOLD+15
;INTIALIZE THE ELF AND CLEAR THE MASTER NUMBER. THIS INSURES THAT
;WE READ CURRENT DATA
IOPUSH 1, ;CALLER MIGHT WANT THIS CHANNEL
JRST [ OUTSTR CM0 ;IOPDLOV MESSAGE
JRST ERR ]
INIT 1,17 ;INITIALIZE THE ELF
SIXBIT /ELF/
0
JRST [ OUTSTR CM1 ;ERROR RETURN
ERR: AOS HOLD+1 ;RETURN ERROR VALUE
JRST TLKDNE ]
GETSTS 1,1 ;GET THE ELF STATUS WORD
TRNE 1,777700 ;CHECK FOR ERROR CONDITION
JRST [ OUTSTR CM2 ;INDICATE STATUS ERROR
JRST ERR ]
MTAPE 1,MASADR ;ZERO MASTER NUMBER
JRST [ OUTSTR CM3 ;ERROR RETURN
JRST ERR ]
;WAIT TILL ELF COLLECTS THE DATA
MOVEI 3,=10 ;TRY READING ELF DATA 10 TIMES
READLP: SETZ 1, ;SLEEP BEFORE TRYING AGAIN
SLEEP 1,
MTAPE 1,DNEADD ;GET THE DONE WORD FROM THE ELF
JRST [ OUTSTR CM6 ;ERROR RETURN
JRST ERR ]
MOVE 2,DNEWRD ;LOAD VALUE INTO REGISTER
JUMPG 2,ELFDNE ;BRANCH IF THE ELF SIGNALS DONE
SOJG 3,READLP ;REPEAT IF MORE TIME LEFT
OUTSTR CM4 ;ELSE TELL OPERATOR ELF TOOK TOO MUCH TIME
JRST ERR
;TRANSFER THE DATA BACK TO THE MAIN PROGRAM IF ALL WENT WELL
ELFDNE: CAIE 2,MASTER ;MAKE SURE WE GOT THE RIGHT MASTER NUMBER
JRST [ OUTSTR CM7 ;SIGNAL ERROR
JRST ERR ]
MOVE 2,-1(P) ;GET ADDRESS TO TRANSFER DATA
SOJ 2, ;DECREMENT ARRAY POINTER
HRLI 2,-DBUFL ;SET POINTER TO TRANSFER DATA
MOVEM 2,INLST
USETI 1,GAGE ;SET UP INPUT STRAIN GAGE DATA
IN 1,INLST ;READ IN A BLOCK OF DATA
JRST .+2 ;NORMAL RETURN
JRST [ OUTSTR CM8 ;ERROR RETURN
JRST ERR ]
;RETURN TO CALLING PROGRAM
TLKDNE: IOPOP 1, ;RELEASE THE ELF & RESTORE CHANNEL 1
JFCL ;JUST CANNOT HAPPEN
HRLZI 16,HOLD ;RESTORE THE REGISTERS
BLT 16,16
SUB P,[2(2)] ;POP ARGUMENTS OFF STACK
JRST @2(P) ;RETURN
; [LOCAL STORAGE AREA]
HOLD: BLOCK 17
;I/O DATA AREAS
GAGE: 400004,,400000+DATADD ;MODE AND ADDRESS FOR "IN" OF STRAIN GAGE DATA
INLST: 0 ;PT. TO DATA ARRAY
0
MASADR: 003000,,MASLOC ;CLEAR MASTER WORD
0
DNEADD: 002004,,MASLOC ;MODE AND ADDRESS FOR MASTER DONE WORD
DNEWRD: 0 ;VALUE OF DONE WORK
;OUTPUT STRINGS
CM0: ASCIZ/IOPDLOV WHEN TRY TO SAVE CHANNEL 1 FOR "ELF"
/
CM1: ASCIZ/CANNOT INIT "ELF"
/
CM2: ASCIZ/"ELF" STATUS WORD INDICATES ERROR CONDITION
/
CM3: ASCIZ/UNABLE TO ZERO MASTER NUMBER IN "ELF"
/
CM4: ASCIZ/"ELF" NOT TRANSFERING STRAIN GAGE READINGS
/
CM5: ASCIZ/BAD READ FROM "ELF" DURING POSITION DATA TRANSFER
/
CM6: ASCIZ/ELF READ ERROR WHILE WAITING FOR ADC READING TO COMPLETE
/
CM7: ASCIZ/ELF MASTER NUMBER INCORRECT, CAN'T READ THE DATA
/
CM8: ASCIZ/ERROR IN TRANSFERING STRAIN GAGE DATA
/
END